package com.eltsistemas.controller.afastamento;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.eltsistemas.controller.grupo.GrupoComPermissao;
import com.eltsistemas.dao.FuncionarioDao_Lista;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Afastamento;
import com.eltsistemas.modelo.Funcionario;
import com.eltsistemas.modelo.Usuario;

@Controller
@SessionAttributes("usuario_Logado")
public class AfastamentoLista {
	
	@RequestMapping(value="/afastamento/lista", method={RequestMethod.GET,RequestMethod.POST} )
	public String lista(Model model, String nomeFuncionario, @ModelAttribute("usuario_Logado") Usuario user)
	{
		try
		{
			//Verifica se o grupo tem permissao
			List<String> moduloList = new GrupoComPermissao().getPermissao(user.getGrupo(), "Afastamento");
			for(String modulo : moduloList)
			{
				if(modulo.equals("visualizar"))
				{
						Session session = new HibernateUtil().getSession();
						session.beginTransaction();
						
						GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
						FuncionarioDao_Lista daoFuncionario_Lista = new FuncionarioDao_Lista(session);
						//Verifica se existe algum funcionario
						if(nomeFuncionario != null && !nomeFuncionario.equals("") )
						{

							Funcionario funcionario = daoFuncionario.findByName(nomeFuncionario);
									
							GenericDao<Afastamento> daoAfastamento = new GenericDao<>(session, Afastamento.class);
							model.addAttribute("nomeFuncionario", nomeFuncionario);
							model.addAttribute("afastamentos", daoAfastamento.listaByIdFuncionario(funcionario.getId()));
							model.addAttribute("funcionarios", daoFuncionario_Lista.listaAll(user));		
						}
						else
						{
							model.addAttribute("funcionarios", daoFuncionario_Lista.listaAll(user));
						}
						
						model.addAttribute("grupo_Permissoes", moduloList);
						session.close();
						return "afastamento";
				}
			}
			return "redirect:/painel/index";
		}
		catch(HibernateException e)
		{
			return "redirect:/painel/erro";
		}
	}

}
